package GUI;

/*********************************************
* Un squelette de serveur TCP Multi-Processus.
*
* Yann & JC
* INSA TOULOUSE
**********************************************/
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.net.Socket;
public abstract class AbstractThread extends Thread
{
    Socket sock=null;
    BufferedWriter out=null;
    BufferedReader in=null;
    ///////////////////////////////////////////////
    // Pour un client
    ///////////////////////////////////////////////
    public AbstractThread(String host,int port)
    {
        try
        {
            System.out.println("Connexion vers "+host+":"+port+"...");
            initStreams(new Socket(host,port));
        }
        catch (Exception e)
        {
            System.err.println(e);
        }
    }
    ///////////////////////////////////////////////
    // Pour un serveur
    ///////////////////////////////////////////////
    public AbstractThread(Socket client)
    {
        System.out.println("Connexion depuis "+client.getInetAddress()+":"+client.getPort()+"...");
        initStreams(client);
    }
    ///////////////////////////////////////////////
    ///////////////////////////////////////////////
    public void initStreams(Socket s)
    {
        try
        {
            sock=s;
            out= new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
            in= new BufferedReader(new InputStreamReader(sock.getInputStream()));
            this.start();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    ///////////////////////////////////////////////
    ///////////////////////////////////////////////
    public void close()
    {
        try
        {
            System.out.println("Fermeture de la connexion...");
            if (sock!=null)
            {
                sock.close();
                //sock=null;
                //out.close();//=null;
                //in.close();//=null;
            }
        }
        catch (Exception e)
        {
            //System.err.println(e);
        }
    }
    ///////////////////////////////////////////////
    ///////////////////////////////////////////////
    public abstract void startProtocol() throws Exception;
    ///////////////////////////////////////////////
    ///////////////////////////////////////////////
    public void run()
    {
        try
        {
            startProtocol();
        }
        catch (Exception e)
        {
            //System.err.println(e);
            e.printStackTrace();
        }
        finally
        {
            close();
        }
    }
}
